<?
header("Content-Type:text/html;charset=utf-8");
//包含全局文件，定义数据库的类 $db ，连接数据库等
include("dataClass.php");

// 下面是中文分词函数
function ChineseWordSegment($str){
	$words = array();
	
	//utf-8 编码的正则，分别意思是: 英文符号与空格|英文及数字|汉字范围一|汉字范围二
	//汉字占三个字符
	$pa = "/[[:punct:]|\\s_]+|[a-z0-9]+|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]/mi";
	
	//若网站是 gb2312 编码，则汉字占两个字符，正则应改为
	//$pa = "/[[:punct:]|\\s_]+|[a-z0-9]+|[\x80-\xff]{2}/mi";
	
	//排除汉字中的符号
	$punctcn = "～！·＃￥％…—＊（）—＋｛｝［］｜、；：‘’“”，。《》？／　";
	
	//按正则把$str分割成数组 $r
	//$r 元素的值可能为:一串英文符号与空格,一串英文及数字，一个汉字或汉字符号
	preg_match_all($pa,$str,$r);

	$lv = '';
	//把相临的2个汉字组成一个"词"
	foreach($r[0] as $k=>$v) {
	//如果不是汉字
	//过滤掉英文符号或空格,单个字母或数字
	//不和前一个元素组合,而自成一个"词"
	if(ord($v[0])<128){
	if(preg_match('/^[a-z0-9]{2,}$/i',$v)) $words[] = $v;
	$lv = '';
	continue;
	}
	//如果是汉字符号,过滤掉,不组"词"
	if(strrchr($punctcn,$v)){
	$lv = '';
	continue;
	}
	//汉字,和前一个汉字组成一个"词"
	if($lv) $words[] = $lv.$v;
	$lv = $v;
	}
	return $words;
}


// 计算一个词语在内容中出现的次数
function showtimes($word,$content){
	$nc = str_replace("$word","",$content);
	return (strlen($content)-strlen($nc))/strlen($word);
}


$articleid = 10173; //设文章的ID为 100

$query = $db->query("select * from model where ID=$articleid ");
$article = $db->getarray($query); //得到文章的记录 $article

$words = ChineseWordSegment($article['name']); //把文章的标题进行分词

print_r($words);

//mysql 的 like 查询一语句,因为 like 会返回 1 或 0,
//所以将后分词的 like 结果乘以权重,再进行相加,
//相加的和越大记录的排在越前面,和相同的记录随机排序

$sqlstr = '(';
foreach($words as $k=>$w){
// $im 为该分词的权重.
// 在文章内容中出现该词的次数越多,该词 like 匹配的结果数字会越大
// 则含有该词的标题越容易排在前面
$im = 1 + showtimes($w,strip_tags($article['name']));
$sqlstr .= ($k?'+':'')."(`name` like '%".mysql_escape_string($w)."%')*$im";
}
$sqlstr .= ")";

$mysql = "select ID,name,$sqlstr as ID from model where ID<>$articleid and $sqlstr order by ID desc,rand() limit 5";

//echo $mysql;

//可以看到 $sqlstr 这一串比较长的 like 语句,在查询中出现2次,
//一次用来筛选结果,一次用来进行相关性排序.
//但 mysql 优化器会注意到两串 like 语句是一样的,不会占用额外的资源计算2次.



$query = $db->query($mysql);
while($result = $db->getarray($query)){
echo "· <a href=\"#\">$result[name]</a><br />";
}

?> 